package tests;


import static org.junit.Assert.*;

import java.util.Calendar;

import metier.Film;
import metier.RecompenseFilm;

import org.junit.Before;
import org.junit.Test;

import DAO.DAOFilmJPA;
import DAO.DAOJPA;
import DAO.DAORecompenseFilm;
import DAO.DAORecompenseFilmJPA;


public class testDAORecompenseFilm {

	private DAORecompenseFilm dao;
	private DAOFilmJPA daofilm;
	private RecompenseFilm rec1;
	private Film film;

	@Before
	public void init() {
		this.film = new Film("titreFilm",2014,20);
		this.rec1 = new RecompenseFilm(film, 2015, "cesar", "RAISON_FILM");
		this.dao = DAORecompenseFilmJPA.getInstance();
		this.daofilm = DAOFilmJPA.getInstance();
		DAOJPA.viderBase();
	}
	
	@Test
	public void testRecompense() {
		// Pr�conditions
		assertEquals(0,dao.getNombreRecompenses());	// rien dans la table
		
		daofilm.save(film);
		dao.save(rec1);
		
		// Postconditions
		assertEquals(1,dao.getNombreRecompenses());	// Un article est dans la table
		assertNotEquals(-1, rec1.getId());	// Le code de l'auteur contient la cl� g�n�r�e par la BD
		
		// On v�rifie que l'auteur de la table est bien celui du test
		RecompenseFilm	rec2 = dao.get(rec1.getId());	
		assertEquals(rec1, rec2);			// C'est bien le m�me code
		
		// On supprime l'objet que l'on vient de consulter
		dao.remove(rec2);				
		
		assertEquals(0,dao.getNombreRecompenses());	// La table est bien vide
		
		// Attention, on ne peut rien faire pour auteur1. Il parait toujours manag�...
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void testSaveException() {

		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());

		// Ajouter le m�me auteur lance une exception
		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());
	}	
	
	@Test(expected=IllegalArgumentException.class)
	public void testRemoveException() {
	
		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());

		// Supprimer 2 fois le m�me auteur lance une exception 
		dao.remove(rec1);
		assertEquals(0,dao.getNombreRecompenses());
		
		dao.remove(rec1);
	}

}